// MyMapCanvas.cpp
#include "myQgsMapCanvas.h"
#include <qgsmapcanvas.h>
#include <QMouseEvent>
#include <QPoint>
#include <QCursor>
#include <qgsvector.h>
#include <QPalette>

MyQgsMapCanvas::MyQgsMapCanvas(QWidget *parent)
    : QgsMapCanvas(parent)
{
    // 构造函数实现
    //setCanvasColor(Qt::black);
}

MyQgsMapCanvas::~MyQgsMapCanvas()
{
    // 析构函数
    // // 启用双缓冲
    // setAttribute(Qt::WA_OpaquePaintEvent);
    // setAttribute(Qt::WA_NoSystemBackground);


}

void MyQgsMapCanvas::mousePressEvent(QMouseEvent *event)
{
    //if (event->button() == Qt::MiddleButton)
    if (event->button() == Qt::RightButton)
    {
        //qDebug()<<"MiddleButton!";
        // 发出信号
        //emit mousePressedAt(event->pos());
/*
        // 获取鼠标点击位置
        QPoint mousePos = event->pos();

        // 获取canvas中心位置
        QPoint centerPos = rect().center();

        // 计算平移量，平移后的目标位置
        QPoint delta = centerPos - mousePos;

        // 获取当前视图中心位置
        QgsPointXY currentCenter = getCoordinateTransform()->toMapCoordinates(centerPos.x(), centerPos.y());

        // 计算新的视图中心
        //QgsPointXY newCenter = currentCenter - QgsPointXY(delta.x(), delta.y());
        QgsPointXY newCenter =QgsPointXY( currentCenter.x() -delta.x(), currentCenter.y()-delta.y());
*/
        // 获取鼠标点击位置
        QPoint mousePos = event->pos();
        // 获取当前视图中心位置
        QgsPointXY newCenter = getCoordinateTransform()->toMapCoordinates(mousePos.x(), mousePos.y());

        // 禁用更新，避免闪烁
        //setUpdatesEnabled(false);
        // 移动地图视图
        setCenter(newCenter);
        refresh();

        // 重新启用更新
        //setUpdatesEnabled(true);
        return;
    }
    // else if (event->button() == Qt::RightButton)
    // {
    //     qDebug()<<"RightButton!";
    // }
    // 调用基类的鼠标事件处理
    QgsMapCanvas::mousePressEvent(event);
}
